#include <iostream>
#include "mprpcapplication.h" //想要使用框架就得包含框架的头文件
#include "FriendList.pb.h"

int main(int argc, char *argv[])
{

    MprpcApplication::Init(argc, argv);

    // 演示调用远程发布rpc的方法Login,UserServiceRpc_Stub是专门用来协助rpc客户端的
    fixbug::FriendServiceRpc_Stub stub(new MprpcChannel()); // 生成一个代理对象,以后通过stub来调用rpc方法

    // rpc方法的请求参数
    fixbug::GetFriendListRequest request; // 用户端发起调用，request肯定是这边给
    request.set_userid(1000);

    // rpc方法的响应
    fixbug::GetFriendListResponse response;

    MprpcController controller;
    // 发起rpc方法的调用，下面是同步的rpc方法调用过程，即它的底层是MprpcChannel::callMethod
    stub.GetFriendList(&controller, &request, &response, nullptr); // 集中来做rpc方法调用的参数的序列化和网络发送了

    // 走到这里表示一次rpc调用完成，读取调用的结果
    // 判断调用过程有没有出问题
    if (controller.Failed())
    {
        // 表示出问题
        std::cout << controller.ErrorText() << std::endl;
    }
    else
    {
        if (0 == response.result().errcode())
        {
            std::cout << "rpc GetFriendList response success:" << std::endl;
            int size = response.friends_size();
            for (int i = 0; i < size; ++i)
            {
                std::cout << "index:" << (i + 1) << "  name:" << response.friends(i) << std::endl;
            }
        }
        else
        {
            std::cout << "rpc GetFriendList response error:" << response.result().errmsg() << std::endl;
        }
    }
    return 0;
}
